using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._IndoorsTools._IndoorsNetwork
{
    /// <summary>
    /// <para>Generate Indoor Pathways</para>
    /// <para>Generates preliminary pathways that are cut according to obstructions, such as walls or columns, on selected levels in one or more facilities.</para>
    /// <para>生成根据障碍物（如墙壁或柱子）在一个或多个设施点的选定楼层上切割的初步路径。</para>
    /// </summary>    
    [DisplayName("Generate Indoor Pathways")]
    public class GenerateIndoorPathways : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GenerateIndoorPathways()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_level_features">
        /// <para>Input Level Features</para>
        /// <para>The input polygon features representing levels in facilities. In the Indoors model, this will be the Levels layer. The tool honors selections and definition queries applied to the layer.</para>
        /// <para>输入面要素表示设施点中的标高。在 Indoors 模型中，这将是 Levels 图层。该工具支持应用于图层的选择和定义查询。</para>
        /// </param>
        /// <param name="_in_detail_features">
        /// <para>Input Detail Features</para>
        /// <para>The input polyline features representing architectural details that can serve as barriers to travel within a facility. In the Indoors model, this will be the Details layer</para>
        /// <para>输入折线要素表示可作为设施内旅行障碍的建筑细节。在 Indoors 模型中，这将是 Details 图层</para>
        /// </param>
        /// <param name="_target_pathways">
        /// <para>Target Pathways</para>
        /// <para>The feature class or feature layer to which generated pathway polylines will be written. In the Indoors model, this will be the PrelimPathways layer.</para>
        /// <para>将生成的路径折线写入的要素类或要素图层。在 Indoors 模型中，这将是 PrelimPathways 图层。</para>
        /// </param>
        public GenerateIndoorPathways(object _in_level_features, object _in_detail_features, object _target_pathways)
        {
            this._in_level_features = _in_level_features;
            this._in_detail_features = _in_detail_features;
            this._target_pathways = _target_pathways;
        }
        public override string ToolboxName => "Indoors Tools";

        public override string ToolName => "Generate Indoor Pathways";

        public override string CallName => "indoors.GenerateIndoorPathways";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_level_features, _in_detail_features, _target_pathways, _lattice_rotation, _lattice_density, _restricted_unit_features, _restricted_unit_exp, _detail_exp, _updated_pathways];

        /// <summary>
        /// <para>Input Level Features</para>
        /// <para>The input polygon features representing levels in facilities. In the Indoors model, this will be the Levels layer. The tool honors selections and definition queries applied to the layer.</para>
        /// <para>输入面要素表示设施点中的标高。在 Indoors 模型中，这将是 Levels 图层。该工具支持应用于图层的选择和定义查询。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Level Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_level_features { get; set; }


        /// <summary>
        /// <para>Input Detail Features</para>
        /// <para>The input polyline features representing architectural details that can serve as barriers to travel within a facility. In the Indoors model, this will be the Details layer</para>
        /// <para>输入折线要素表示可作为设施内旅行障碍的建筑细节。在 Indoors 模型中，这将是 Details 图层</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Detail Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_detail_features { get; set; }


        /// <summary>
        /// <para>Target Pathways</para>
        /// <para>The feature class or feature layer to which generated pathway polylines will be written. In the Indoors model, this will be the PrelimPathways layer.</para>
        /// <para>将生成的路径折线写入的要素类或要素图层。在 Indoors 模型中，这将是 PrelimPathways 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Pathways")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_pathways { get; set; }


        /// <summary>
        /// <para>Lattice Rotation</para>
        /// <para><xdoc>
        ///   <para>The number of degrees by which the input floors' primary travel direction is rotated clockwise from due west. If left blank, the tool will calculate a value based on the minimum bounding rectangle of each floor.</para>
        ///   <para>The value must be between 0.0 and 180.0.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>输入楼层的主要行进方向从正西顺时针旋转的度数。如果留空，该工具将根据每个楼层的最小边界矩形计算一个值。</para>
        ///   <para>该值必须介于 0.0 和 180.0 之间。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Lattice Rotation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _lattice_rotation { get; set; } = null;


        /// <summary>
        /// <para>Lattice Density</para>
        /// <para><xdoc>
        ///   <para>The longest distance, in meters, allowed between nodes in the generated lattice of pathways. The default value is 0.6.</para>
        ///   <para>The value must be between 0.25 and 0.9.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>生成的路径晶格中的节点之间允许的最长距离（以米为单位）。默认值为 0.6。</para>
        ///   <para>该值必须介于 0.25 和 0.9 之间。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Lattice Density")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _lattice_density { get; set; } = 0.6;


        /// <summary>
        /// <para>Restricted Unit Features</para>
        /// <para>The input polygon features representing restricted and unrestricted spaces within a facility. In the Indoors model, this will be the Units layer.</para>
        /// <para>输入面要素表示设施内受限空间和不受限制空间。在 Indoors 模型中，这将是 Units 图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Restricted Unit Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _restricted_unit_features { get; set; } = null;


        /// <summary>
        /// <para>Restricted Unit Expression</para>
        /// <para>An SQL expression used to select Restricted Unit Features values in which the tool will not generate pathways.</para>
        /// <para>一个 SQL 表达式，用于选择受限单位要素值，工具不会在其中生成路径。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Restricted Unit Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _restricted_unit_exp { get; set; } = null;


        /// <summary>
        /// <para>Detail Expression</para>
        /// <para>An SQL expression used to select Input Detail Features values across which the tool will not generate pathways.</para>
        /// <para>一个 SQL 表达式，用于选择输入详细信息要素值，工具不会在该值上生成路径。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Detail Expression")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _detail_exp { get; set; } = null;


        /// <summary>
        /// <para>Updated Pathways</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Pathways")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_pathways { get; set; }


        public GenerateIndoorPathways SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}